home *** CD-ROM | disk | FTP | other *** search
/ Suzy B Software 2 / Suzy B Software CD-ROM 2 (1994).iso / new_file / fontwork / pgsmodst / atariprt.lzh / ANSI364.S next >
Encoding:
Text File  |  1991-05-23  |  4.9 KB  |  262 lines

  1.  include "prtequ.h"
  2.  
  3. *
  4. * Ansi x3.64 print driver
  5. *
  6. CR    equ    $d
  7. LF    equ    $a
  8. FF    equ    $c
  9. ESC    equ    $1b
  10.  
  11.  
  12.  SECTION printer,CODE,PUBLIC
  13. ***************************************************************
  14. ***************************************************************
  15. ***************************************************************
  16. dumbentry:
  17.     clr.l    d0
  18.     rts
  19.  
  20.     dc.l    "PRNT"
  21.     dc.w    200
  22. *
  23. *
  24. * distribute the calls the the appropriate routines
  25. *
  26. ansi:    move.l    a0,table
  27.     lsl.w    #2,d0
  28.     lea    prntbl,a1
  29.     move.l    0(a1,d0.w),a1
  30.     jmp    (a1)
  31.  
  32. *
  33. * identify who I am, and set up who I like to speak to.
  34. *
  35. p_ident:
  36.     move.l    #driver,pdrvrnm(a0)    ;pointer to string for driver name
  37.     move.w    #PARALLEL+ASCENDING,device(a0)
  38. prtok:    moveq    #1,d0
  39.     rts
  40.  
  41. *
  42. * initialize the table of printer specific routines
  43. *
  44. p_init:    move.l    #driver,pdrvrnm(a0)    ;pointer to string for driver name
  45.     clr.b    pdl(a0)            ;no page description language
  46.     clr.b    pmult(a0)        ;automatically print mulitiple copies?
  47.     clr.b    pman(a0)        ;handle manual feed?
  48.     move.b    #PRT_BW,ptype(a0)    ;printer type?
  49.     move.l    sendout(a0),send+2    ;self-modifing code, tisk, tisk!
  50.  
  51. *
  52. * pminlft and pmaxw must be evenly divisible by 16
  53. * this is the part that should be worked out
  54. *
  55.  
  56.     move.w    pdensity(a0),d0
  57.     cmp.w    #7,d0
  58.     bcs    pint1
  59.     moveq    #6,d0
  60. pint1:    lsl.w    #1,d0
  61.  
  62.     lea    xdpi_tbl,a1
  63.     move.w    0(a1,d0.w),pxdpi(a0)    ;x resolution
  64.     lea    ydpi_tbl,a1
  65.     move.w    0(a1,d0.w),pydpi(a0)    ;y resolution
  66.  
  67.     lea    minl_tbl,a1
  68.     move.w    0(a1,d0.w),pminlft(a0)    ;pixels from the left
  69.     lea    minr_tbl,a1
  70.     move.w    0(a1,d0.w),pminrht(a0)    ;pixels from the right
  71.     lea    mint_tbl,a1
  72.     move.w    0(a1,d0.w),pmintop(a0)    ;pixels down from top
  73.     lea    minb_tbl,a1
  74.     move.w    0(a1,d0.w),pminbot(a0)    ;pixels up from bottom
  75.     lea    xover_tbl,a1
  76.     move.w    0(a1,d0.w),pxover(a0)    ;percentage of x overlap of dots
  77.     lea    yover_tbl,a1
  78.     move.w    0(a1,d0.w),pyover(a0)    ;percentage of y overlap of dots
  79.     lea    rowht_tbl,a1
  80.     move.w    0(a1,d0.w),prowht(a0)    ;rows height modula
  81.  
  82.     move.w    0(a1,d0.w),rowht
  83.     lea    rows_tbl,a1
  84.     move.w    0(a1,d0.w),rows
  85.     lsl.w    #1,d0
  86.     lea    grmode_tbl,a1
  87.     move.l    0(a1,d0.w),grmode
  88.     lea    maxw_tbl,a1
  89.     move.l    0(a1,d0.w),pmaxw(a0)    ;maximum # pixels across
  90.     lea    maxh_tbl,a1
  91.     move.l    0(a1,d0.w),pmaxh(a0)    ;maximum # pixels down
  92.     bra    prtok
  93.  
  94.  
  95. *
  96. * going to begin printing a document
  97. *
  98. p_bgndoc:
  99.     lea    bgndoc,a0
  100.     bra    sendline
  101.  
  102. *
  103. * about to start printing of a page
  104. *
  105. p_bgnpage:
  106.     bra    prtok
  107.  
  108. *
  109. * about to print a new tile for the page
  110. *
  111. p_bgntile:
  112.     move.l    grmode,a0        ;set the density
  113.     bra    sendline
  114.  
  115. *
  116. * print a block to the printer
  117. *
  118. p_block:
  119.     move.l    table,a0
  120.     move.l    pblockw(a0),d0
  121.     move.w    d0,width
  122.     move.l    pblockptr(a0),a1
  123.     move.l    (a1),a1
  124.     add.l    pblockoff(a0),a1
  125.     move.l    a1,v_base
  126.  
  127.     move.w    width,d0
  128.     move.l    v_base,a0
  129. putln1:    tst.b    -1(a0,d0.w)
  130.     bne    putln2
  131.     subq.w    #1,d0
  132.     bne    putln1
  133.     moveq    #1,d0
  134. putln2:    move.w    d0,twidth
  135.  
  136. *
  137.     move.w    twidth,d1
  138.     move.l    v_base,a0
  139. putln3:    cmpi.b    #ESC,(a0)
  140.     beq    putln4
  141.     cmpi.b    #CR,(a0)
  142.     beq    putln4
  143.     cmpi.b    #LF,(a0)
  144.     beq    putln4
  145.     cmpi.b    #FF,(a0)
  146.     bne    putln5
  147.  
  148. putln4:    move.l    a0,-(sp)
  149.     move.w    d1,-(sp)
  150.     move.b    #ESC,d0
  151.     bsr    send
  152.     move.w    (sp)+,d1
  153.     move.l    (sp)+,a0
  154. putln5:    move.b    (a0)+,d0
  155.     move.l    a0,-(sp)
  156.     move.w    d1,-(sp)
  157.     bsr    send
  158.     move.w    (sp)+,d1
  159.     move.l    (sp)+,a0
  160.     subq.w    #1,d1
  161.     bne    putln3
  162.     lea    endline,a0
  163.     bra    sendline
  164. *
  165.  
  166. *
  167. * just finished describing current tile
  168. *
  169. p_endtile:
  170.     lea    endtile,a0
  171.     bra    sendline
  172.  
  173. *
  174. * just finished describing all tiles for this page
  175. *
  176. p_endpage:
  177.     bra    prtok
  178.  
  179. *
  180. * finished printing the document
  181. *
  182. p_enddoc:
  183.     bra    prtok
  184.  
  185. ***************************************************
  186. ***    these are the send routines for the    ***
  187. ***    dot matrix driver.            ***
  188. ***************************************************
  189. *
  190. sendline:
  191.     move.b    (a0)+,d0
  192.     beq    prtok
  193.     move.l    a0,-(sp)
  194.     bsr    send
  195.     move.l    (sp)+,a0
  196.     bra    sendline
  197. *
  198. *
  199. sendn:    cmp.w    #10,d0
  200.     bcs    sdn1
  201.     and.l    #$ffff,d0
  202.     divu    #10,d0
  203.     swap    d0
  204.     move.w    d0,-(sp)
  205.     swap    d0
  206.     bsr    sendn
  207.     move.w    (sp)+,d0
  208. sdn1:    or.b    #"0",d0
  209. *
  210. *    bra    send
  211. *
  212. *
  213. send:    jmp    $ffffff
  214. *
  215. *
  216. ***********************************
  217. ***                ***
  218. ***********************************
  219.  SECTION printer,DATA,PUBLIC
  220. prntbl:    dc.l    prtok,prtok,prtok,prtok,p_init
  221.     dc.l    p_bgndoc,p_bgnpage,p_bgntile
  222.     dc.l    p_block
  223.     dc.l    p_endtile,p_endpage,p_enddoc
  224.     dc.l    prtok,p_ident
  225.  
  226.  
  227. xdpi_tbl:    dc.w    60,75,100,150,300,300,300
  228. ydpi_tbl:    dc.w    60,75,100,150,300,300,300
  229. minl_tbl:    dc.w    15,20,26,40,80,80,80
  230. minr_tbl:    dc.w    15,20,26,40,80,80,80
  231. mint_tbl:    dc.w    11,14,19,28,56,56,56,56
  232. minb_tbl:    dc.w    11,14,19,28,56,56,56,56
  233. maxw_tbl:    dc.l    480,600,800,1200,2400,2400,2400
  234. maxh_tbl:    dc.l    0,0,0,0,0,0,0
  235. xover_tbl:    dc.w    0,0,0,0,0,0,0
  236. yover_tbl:    dc.w    0,0,0,0,0,0,0
  237. rowht_tbl:    dc.w    1,1,1,1,1,1,1
  238. rows_tbl:    dc.w    1,1,1,1,1,1,1
  239. grmode_tbl:    dc.l    res60,res75,res100,res150,res300,res300,res300
  240.  
  241. driver:        dc.b    "QMS Kiss ansi3.64 beta",0
  242.  
  243. bgndoc:        dc.b    ESC,"[1r",0
  244. endline:    dc.b    ESC,"C",0
  245. endtile:    dc.b    ESC,"\\",0
  246.  
  247. res60:        dc.b    ESC,"P3;1;0;0;5;5}",0
  248. res75:        dc.b    ESC,"P3;1;0;0;4;4}",0
  249. res100:        dc.b    ESC,"P3;1;0;0;3;3}",0
  250. res150:        dc.b    ESC,"P3;1;0;0;2;2}",0
  251. res300:        dc.b    ESC,"P3;1;0;0;1;1}",0
  252.  
  253.  SECTION printer,BSS,PUBLIC
  254. table:    ds.l    1
  255. twidth:    ds.w    1
  256. v_base:    ds.l    1
  257. width:    ds.w    1
  258. count:    ds.w    1
  259. rows:    ds.w    1
  260. rowht:    ds.w    1
  261. grmode:    ds.l    1
  262.